package test.string;

public class StringTest2 {

    public static void main(String[] args) {
        //java中每一个字符串都是一个对象
        String str1 = "abc";
        String str2 = "abc";

        //java中==是比较对象直接的地址值，所以结果是true
        System.out.println("str1 == str2: "+ (str1 == str2)); //true


        //可以看到上面str1 str2 和 str3的地址都不同
        //str1和str2是在jvm的堆中的字符常量池里面 而str3在jvm堆中创建了对象 所以地址不同
        String str3 = new String("123");
        System.out.println("str1 == str3: "+ (str1 == str3)); //false



        //这个例子也很好的证明了s2和s3虽然都是123，但是地址不同所以是false
        String s1 = "123";
        String s2 = new String(s1);
        String s3 = new String(s2);
        System.out.println("s2 == s3: "+(s2 == s1));


        //intern()方法 可以把字符串放到常量池里面 所以结果是true
        String s4 = new String(s1).intern();
        System.out.println("s1 == s4: "+(s1 == s4));


        //==是比较对象直接的地址值 所以要比较对象的值用equals
        System.out.println("s1.equals(s3): "+(s1.equals(s3)));

    }

}
